package com.whales.shared.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

import com.whales.shared.dao.CommonDao;
import com.whales.shared.util.SingletonData;

public abstract class BaseService {
    @Inject
    protected CommonDao commonDao;
    @Inject
    private MessageSource messageSource;
    
    /**
     * 신규 System ID를 반환 한다.  
     * @메소드명 : getNewId   					   
     * @작성자 : sw775.park   
     * @작성일 : 2011. 7. 22.
     * @return
     * @throws Exception	
     * @설명 :
     * @수정이력 - 수정일,수정자,수정내용					   
     *										   
     */
    @SuppressWarnings("unchecked")
    public String getNewId() throws Exception{
        Map<String,String> map = (Map<String,String>) commonDao.findInfo("shared.getNewId", null);
        return map.get("id");
    }
    
    /**
     * 다국어 resource를 반환 한다.
     * @메소드명 : getMessage                          
     * @작성자 : sw775.park   
     * @작성일 : 2011. 8. 10.
     * @param key
     * @return
     * @throws Exception    
     * @설명 :
     * @수정이력 - 수정일,수정자,수정내용                    
     */
    protected String getMessage(String key) throws Exception{
        return this.getMessage(key, null);
    }
    
    /**
     * <p>다국어 resource를 반환 하며,</p>
     * <p>argments가 있어서 {0}, {1}, ...형태를 사용할 수 있다.</p>
     * @메소드명 : getMessage                          
     * @작성자 : sw775.park   
     * @작성일 : 2011. 8. 10.
     * @param key
     * @param args
     * @return
     * @throws Exception    
     * @설명 :
     * @수정이력 - 수정일,수정자,수정내용                    
     */
    protected String getMessage(String key, String[] args) throws Exception{
        return messageSource.getMessage(key, args, "NO MESSAGE",LocaleContextHolder.getLocale());
    }
    
    @SuppressWarnings("unchecked")
	public Map<String, String> getProperties() throws Exception{
		Map<String,String> returnMap = new HashMap<String, String>();
		List<Map<String, String>> properties = this.commonDao.findList("shared.getProperties", "");
		for (Map<String, String> map : properties) {
			returnMap.put(map.get("id"), map.get("value"));
		}
		return returnMap;
	}
    
	protected String getProperty(String key) throws Exception{
    	if(SingletonData.getProperty() == null){
    		SingletonData.setProperty(this.getProperties());
    		return SingletonData.getProperty().get(key);
    	}else{
    		return SingletonData.getProperty().get(key);
    	}
    }
}
